////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file camxflashdata.cpp
/// @brief Implements FlashData methods.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "camxincs.h"
#include "camxmem.h"
#include "camxcsl.h"
#include "camxcslsensordefs.h"
#include "camxhwenvironment.h"
#include "camxpacketdefs.h"
#include "camxflashdata.h"

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// FlashData::FlashData
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FlashData::FlashData(
    FlashDriverData*        pFlashDriverData,
    HwSensorInfo*           pSensorInfoTable,
    const HwDeviceTypeInfo* pDeviceInfo)
{
    CSLFlashQueryCapability flashCapability = { 0 };
    CamxResult              result          = CamxResultEFailed;

    m_pFlashDriverData = pFlashDriverData;
    m_hFlashDeviceIndex = -1;

    for (UINT i = 0; i < pDeviceInfo->deviceIndexCount; i++)
    {
        result = CSLQueryDeviceCapabilities(pDeviceInfo->deviceIndex[i], &flashCapability, sizeof(CSLFlashQueryCapability));
        if (CamxResultSuccess == result)
        {
            if (pSensorInfoTable->CSLCapability.flashSlotId == flashCapability.slotInfo)
            {
                CAMX_LOG_INFO(CamxLogGroupSensor,
                              "Found flash driver for SensorInfoTable: %d index: %u deviceIndex: %d: slotInfo: %u",
                              pSensorInfoTable->deviceIndex,
                              i,
                              pDeviceInfo->deviceIndex[i],
                              flashCapability.slotInfo);

                m_hFlashDeviceIndex = pDeviceInfo->deviceIndex[i];
                result              = CamxResultSuccess;
                break;
            }
        }
    }
    if (CamxResultSuccess != result)
    {
        CAMX_LOG_ERROR(CamxLogGroupSensor, "FlashData create failed deviceIndexCount %d", pDeviceInfo->deviceIndexCount)
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// FlashData::~FlashData
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FlashData::~FlashData()
{
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// FlashData::CreateInitializeCmd
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VOID FlashData::CreateInitializeCmd(
    CSLFlashInfoCmd* pInitCmd)
{
    pInitCmd->flashType = static_cast<UINT8>(m_pFlashDriverData->flashDriverType);
    pInitCmd->cmdType   = CSLSensorCmdTypeFlashInit;
}

CAMX_NAMESPACE_END
